﻿
/* ==============================================================================
*
*   Copyright (c) 2010, Pierre Favier
*   All rights reserved.
*
*   NTasking is free software: you can redistribute it and/or modify it
*   under the terms of the GNU General Public License as published by the
*   Free Software Foundation.
*
*   Redistribution and use in source and binary forms, with or without
*   modification, are permitted provided that the following conditions
*   are met:
*
*   -   Redistributions of source code must retain the above copyright notice,
*       this list of conditions and the following disclaimer.
*
*   -   Redistributions in binary form must reproduce the above
*       copyright notice, this list of conditions and the following
*       disclaimer in the documentation and/or other materials
*       provided with the distribution.
*
*   THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
*   WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
*   OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
*   DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
*   BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
*   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
*   TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
*   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
*   ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
*   TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
*   THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
*   SUCH DAMAGE.
*
* ============================================================================== */

// This code has been generated by the T4 engine. DO NOT EDIT otherwise your changes
// will be overwritten at next generation

using System;
using NTasking.Internals;

namespace NTasking
{

    public abstract partial class SynchronizableAttribute
    {

        private static readonly Type _action0 = typeof(Action);
        private static readonly Type _actionMethod0 = typeof (SingleAction);
        private static readonly Type _func0 = typeof(Func<bool>).GetGenericTypeDefinition();
        private static readonly Type _funcMethod0 = typeof(SingleFunc<bool>).GetGenericTypeDefinition();
        private static readonly Type _actionFamily0 = typeof(ActionFamily<double>).GetGenericTypeDefinition();
        private static readonly Type _funcFamily0 = typeof(FuncFamily<double, bool>).GetGenericTypeDefinition();
        
        private static readonly Type _action1 = typeof(Action<int>).GetGenericTypeDefinition();
        private static readonly Type _actionMethod1 = typeof (SingleAction<int>).GetGenericTypeDefinition();
        private static readonly Type _func1 = typeof(Func<int, bool>).GetGenericTypeDefinition();
        private static readonly Type _funcMethod1 = typeof(SingleFunc<int, bool>).GetGenericTypeDefinition();
        private static readonly Type _actionFamily1 = typeof(ActionFamily<double, int>).GetGenericTypeDefinition();
        private static readonly Type _funcFamily1 = typeof(FuncFamily<double, int, bool>).GetGenericTypeDefinition();
        
        private static readonly Type _action2 = typeof(Action<int, int>).GetGenericTypeDefinition();
        private static readonly Type _actionMethod2 = typeof (SingleAction<int, int>).GetGenericTypeDefinition();
        private static readonly Type _func2 = typeof(Func<int, int, bool>).GetGenericTypeDefinition();
        private static readonly Type _funcMethod2 = typeof(SingleFunc<int, int, bool>).GetGenericTypeDefinition();
        private static readonly Type _actionFamily2 = typeof(ActionFamily<double, int, int>).GetGenericTypeDefinition();
        private static readonly Type _funcFamily2 = typeof(FuncFamily<double, int, int, bool>).GetGenericTypeDefinition();
        
        private static readonly Type _action3 = typeof(Action<int, int, int>).GetGenericTypeDefinition();
        private static readonly Type _actionMethod3 = typeof (SingleAction<int, int, int>).GetGenericTypeDefinition();
        private static readonly Type _func3 = typeof(Func<int, int, int, bool>).GetGenericTypeDefinition();
        private static readonly Type _funcMethod3 = typeof(SingleFunc<int, int, int, bool>).GetGenericTypeDefinition();
        private static readonly Type _actionFamily3 = typeof(ActionFamily<double, int, int, int>).GetGenericTypeDefinition();
        private static readonly Type _funcFamily3 = typeof(FuncFamily<double, int, int, int, bool>).GetGenericTypeDefinition();
        
        private static readonly Type _action4 = typeof(Action<int, int, int, int>).GetGenericTypeDefinition();
        private static readonly Type _actionMethod4 = typeof (SingleAction<int, int, int, int>).GetGenericTypeDefinition();
        private static readonly Type _func4 = typeof(Func<int, int, int, int, bool>).GetGenericTypeDefinition();
        private static readonly Type _funcMethod4 = typeof(SingleFunc<int, int, int, int, bool>).GetGenericTypeDefinition();
        private static readonly Type _actionFamily4 = typeof(ActionFamily<double, int, int, int, int>).GetGenericTypeDefinition();
        private static readonly Type _funcFamily4 = typeof(FuncFamily<double, int, int, int, int, bool>).GetGenericTypeDefinition();
        
                
        /// <summary>
        /// Define all the supported synchronized method types
        /// </summary>
        private static readonly SupportedType[] _supportedTypes = new[]
        {
                        
            new SupportedType(_action0, _actionMethod0, false, false),
            new SupportedType(_func0, _funcMethod0, true, false),
            new SupportedType(_actionFamily0, _actionFamily0, false, true),
            new SupportedType(_funcFamily0, _funcFamily0, true, true),
                        
            new SupportedType(_action1, _actionMethod1, false, false),
            new SupportedType(_func1, _funcMethod1, true, false),
            new SupportedType(_actionFamily1, _actionFamily1, false, true),
            new SupportedType(_funcFamily1, _funcFamily1, true, true),
                        
            new SupportedType(_action2, _actionMethod2, false, false),
            new SupportedType(_func2, _funcMethod2, true, false),
            new SupportedType(_actionFamily2, _actionFamily2, false, true),
            new SupportedType(_funcFamily2, _funcFamily2, true, true),
                        
            new SupportedType(_action3, _actionMethod3, false, false),
            new SupportedType(_func3, _funcMethod3, true, false),
            new SupportedType(_actionFamily3, _actionFamily3, false, true),
            new SupportedType(_funcFamily3, _funcFamily3, true, true),
                        
            new SupportedType(_action4, _actionMethod4, false, false),
            new SupportedType(_func4, _funcMethod4, true, false),
            new SupportedType(_actionFamily4, _actionFamily4, false, true),
            new SupportedType(_funcFamily4, _funcFamily4, true, true),
                        
        };

    }

}
